import http from 'axios';
// import qs from 'qs';
// import { message, notification } from 'antd';
// import { notification } from 'antd';
import { trim } from '../util/util';

import config from '../config';
// import constant from '../constant';

// const {
//     api: { prefix, failureUrls, successUrls},
// } = config;

const {
    api: { prefix },
} = config;

// const { exception } = constant;

const interceptor = http.create({
    baseURL: prefix,
});

window.requestCancel = {}; // 全局定义一个存放取消请求的标识

const reject = (e) => {
    console.log(e);
    // const { url } = e.config;
    // const lastIndex = url.lastIndexOf('/');
    // const apiName = url.slice(lastIndex - url.length);

    // notification.error({
    //     message: `错误`,
    //     description: `${apiName}服务请求异常`,
    //     placement: 'bottomRight',
    // });

    // return {
    //     statusInfo: exception.system
    // };
};

interceptor.interceptors.request.use((config) => {
    let method = config.method.toLowerCase();

    config.url = trim(config.url);
    // let url = trim(config.url);
    // if (config.method === 'get' && config.params) {
    //     url += '?';
    //     let keys = Object.keys(config.params);
    //     for (let key of keys) {
    //         url += `${key}=${encodeURIComponent(config.params[key])}&`;
    //     }
    //     url = url.substring(0, url.length - 1);
    //     config.params = {};
    // }
    // config.url = url;

    if (method === 'post' || method === 'put') {
        // if (Array.isArray(config.data)) {
            //需要后端配置requestBody
            // config.headers['content-type'] = 'application/x-www-form-urlencoded';
            // config.data = JSON.stringify(config.data);
            // config.data = qs.stringify(config.data);
        } 
        // else {
        //     config.data = qs.stringify(config.data);
        // }
    // }

    // config.params = {
    //     // _t: Date.now(),
    //     ...config.params,
    // };

    // if (~config.url.indexOf('/base') !== 0) {
    //     const serviceUrl = getServiceUrl();
    //     config.url = `${serviceUrl}${config.url}`.replace(/\/\//g, '/').replace(':', ':/');
    // }

    // if (config.url.startsWith('http://') || config.url.startsWith('https://')) {
    //     config.baseURL = '';
    // }

    // // 针对osm数据获取添加取消请求标记
    // if (config.url.includes('osm/json')) {
    //     const { gridName = '' } = config.params;
    //     if (gridName) {
    //         config.cancelToken = new http.CancelToken(cancel => {
    //             window.requestCancel[gridName] = cancel;
    //         });
    //         delete config.params['gridName'];
    //     }
    // }

    return config;
});

interceptor.interceptors.response.use((res) => {
    let {
        data: { code = 200},
    } = res;
    // TODO:后期登录失效需要后端推送
    if (code === 401) {
        window.location.href = '/login';
        return;
    }

    // if (data !== null && typeof data === 'string') {
    //     try {
    //         data = JSON.parse(data);
    //     } catch (error) {
    //         data = Object.create(null);
    //         status = exception.system.status;
    //     }
    // }

    // if (status !== 200) {
    //     let exist = failureUrls.find((failureUrl) => {
    //         return url.indexOf(failureUrl) > -1;
    //     });
    //     if (exist) {
    //         message.error(msg);
    //     } else if (status === exception.system.status) {
    //         message.error(exception.system.message);
    //     }
    // } else {
    //     let exist = successUrls.find((successUrl) => {
    //         return url.indexOf(successUrl) > -1;
    //     });

    //     if (exist) {
    //         message.success(msg);
    //     }
    // }

    // data = data ? data : {};

    // data.statusInfo = {
    //     status,
    //     message: msg,
    // };

    return res;
}, reject);

export default interceptor;
